package git.soulbgm.utils;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.nio.charset.Charset;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * POI通用方法
 *
 * @author SoulBGM
 * @version 1.0
 * @date 2019/7/22 8:57
 */
public class PoiCommon {
    private static LogUtil log = new LogUtil(PoiCommon.class);

    public final static String APPLICATION_JSON_VALUE = "application/json";
    public final static String APPLICATION_OCTET_STREAM_VALUE = "application/octet-stream";
    public final static String APPLICATION_JSON_UTF8_VALUE = APPLICATION_JSON_VALUE + ";charset=UTF-8";
    public final static String CHARSET_GB2312 = "gb2312";
    public final static String CHARSET_ISO8859_1 = "ISO8859-1";
    private final static String GET = "get";
    private final static String IS = "is";
    private final static String SET = "set";
    public final static String pattern = "yyyy-MM-dd HH:mm:ss";
    public final static String XLSX = ".xlsx";
    public final static int MAX_LENGTH = 1000000;

    public static Map<String, String> contentType;

    static {
        contentType = new HashMap<>(685);
        contentType.put(".load", "text/html");
        contentType.put(".123", "application/vnd.lotus-1-2-3");
        contentType.put(".3ds", "image/x-3ds");
        contentType.put(".3g2", "video/3gpp");
        contentType.put(".3ga", "video/3gpp");
        contentType.put(".3gp", "video/3gpp");
        contentType.put(".3gpp", "video/3gpp");
        contentType.put(".602", "application/x-t602");
        contentType.put(".669", "audio/x-mod");
        contentType.put(".7z", "application/x-7z-compressed");
        contentType.put(".a", "application/x-archive");
        contentType.put(".aac", "audio/mp4");
        contentType.put(".abw", "application/x-abiword");
        contentType.put(".abw.crashed", "application/x-abiword");
        contentType.put(".abw.gz", "application/x-abiword");
        contentType.put(".ac3", "audio/ac3");
        contentType.put(".ace", "application/x-ace");
        contentType.put(".adb", "text/x-adasrc");
        contentType.put(".ads", "text/x-adasrc");
        contentType.put(".afm", "application/x-font-afm");
        contentType.put(".ag", "image/x-applix-graphics");
        contentType.put(".ai", "application/illustrator");
        contentType.put(".aif", "audio/x-aiff");
        contentType.put(".aifc", "audio/x-aiff");
        contentType.put(".aiff", "audio/x-aiff");
        contentType.put(".al", "application/x-perl");
        contentType.put(".alz", "application/x-alz");
        contentType.put(".amr", "audio/amr");
        contentType.put(".ani", "application/x-navi-animation");
        contentType.put(".anim[1-9j]", "video/x-anim");
        contentType.put(".anx", "application/annodex");
        contentType.put(".ape", "audio/x-ape");
        contentType.put(".arj", "application/x-arj");
        contentType.put(".arw", "image/x-sony-arw");
        contentType.put(".as", "application/x-applix-spreadsheet");
        contentType.put(".asc", "text/plain");
        contentType.put(".asf", "video/x-ms-asf");
        contentType.put(".asp", "application/x-asp");
        contentType.put(".ass", "text/x-ssa");
        contentType.put(".asx", "audio/x-ms-asx");
        contentType.put(".atom", "application/atom+xml");
        contentType.put(".au", "audio/basic");
        contentType.put(".avi", "video/x-msvideo");
        contentType.put(".aw", "application/x-applix-word");
        contentType.put(".awb", "audio/amr-wb");
        contentType.put(".awk", "application/x-awk");
        contentType.put(".axa", "audio/annodex");
        contentType.put(".axv", "video/annodex");
        contentType.put(".bak", "application/x-trash");
        contentType.put(".bcpio", "application/x-bcpio");
        contentType.put(".bdf", "application/x-font-bdf");
        contentType.put(".bib", "text/x-bibtex");
        contentType.put(".bin", "application/octet-stream");
        contentType.put(".blend", "application/x-blender");
        contentType.put(".blender", "application/x-blender");
        contentType.put(".bmp", "image/bmp");
        contentType.put(".bz", "application/x-bzip");
        contentType.put(".bz2", "application/x-bzip");
        contentType.put(".c", "text/x-csrc");
        contentType.put(".c++", "text/x-c++src");
        contentType.put(".cab", "application/vnd.ms-cab-compressed");
        contentType.put(".cb7", "application/x-cb7");
        contentType.put(".cbr", "application/x-cbr");
        contentType.put(".cbt", "application/x-cbt");
        contentType.put(".cbz", "application/x-cbz");
        contentType.put(".cc", "text/x-c++src");
        contentType.put(".cdf", "application/x-netcdf");
        contentType.put(".cdr", "application/vnd.corel-draw");
        contentType.put(".cer", "application/x-x509-ca-cert");
        contentType.put(".cert", "application/x-x509-ca-cert");
        contentType.put(".cgm", "image/cgm");
        contentType.put(".chm", "application/x-chm");
        contentType.put(".chrt", "application/x-kchart");
        contentType.put(".class", "application/x-java");
        contentType.put(".cls", "text/x-tex");
        contentType.put(".cmake", "text/x-cmake");
        contentType.put(".cpio", "application/x-cpio");
        contentType.put(".cpio.gz", "application/x-cpio-compressed");
        contentType.put(".cpp", "text/x-c++src");
        contentType.put(".cr2", "image/x-canon-cr2");
        contentType.put(".crt", "application/x-x509-ca-cert");
        contentType.put(".crw", "image/x-canon-crw");
        contentType.put(".cs", "text/x-csharp");
        contentType.put(".csh", "application/x-csh");
        contentType.put(".css", "text/css");
        contentType.put(".cssl", "text/css");
        contentType.put(".csv", "text/csv");
        contentType.put(".cue", "application/x-cue");
        contentType.put(".cur", "image/x-win-bitmap");
        contentType.put(".cxx", "text/x-c++src");
        contentType.put(".d", "text/x-dsrc");
        contentType.put(".dar", "application/x-dar");
        contentType.put(".dbf", "application/x-dbf");
        contentType.put(".dc", "application/x-dc-rom");
        contentType.put(".dcl", "text/x-dcl");
        contentType.put(".dcm", "application/dicom");
        contentType.put(".dcr", "image/x-kodak-dcr");
        contentType.put(".dds", "image/x-dds");
        contentType.put(".deb", "application/x-deb");
        contentType.put(".der", "application/x-x509-ca-cert");
        contentType.put(".desktop", "application/x-desktop");
        contentType.put(".dia", "application/x-dia-diagram");
        contentType.put(".diff", "text/x-patch");
        contentType.put(".divx", "video/x-msvideo");
        contentType.put(".djv", "image/vnd.djvu");
        contentType.put(".djvu", "image/vnd.djvu");
        contentType.put(".dng", "image/x-adobe-dng");
        contentType.put(".doc", "application/msword");
        contentType.put(".docbook", "application/docbook+xml");
        contentType.put(".docm", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
        contentType.put(".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
        contentType.put(".dot", "text/vnd.graphviz");
        contentType.put(".dsl", "text/x-dsl");
        contentType.put(".dtd", "application/xml-dtd");
        contentType.put(".dtx", "text/x-tex");
        contentType.put(".dv", "video/dv");
        contentType.put(".dvi", "application/x-dvi");
        contentType.put(".dvi.bz2", "application/x-bzdvi");
        contentType.put(".dvi.gz", "application/x-gzdvi");
        contentType.put(".dwg", "image/vnd.dwg");
        contentType.put(".dxf", "image/vnd.dxf");
        contentType.put(".e", "text/x-eiffel");
        contentType.put(".egon", "application/x-egon");
        contentType.put(".eif", "text/x-eiffel");
        contentType.put(".el", "text/x-emacs-lisp");
        contentType.put(".emf", "image/x-emf");
        contentType.put(".emp", "application/vnd.emusic-emusic_package");
        contentType.put(".ent", "application/xml-external-parsed-entity");
        contentType.put(".eps", "image/x-eps");
        contentType.put(".eps.bz2", "image/x-bzeps");
        contentType.put(".eps.gz", "image/x-gzeps");
        contentType.put(".epsf", "image/x-eps");
        contentType.put(".epsf.bz2", "image/x-bzeps");
        contentType.put(".epsf.gz", "image/x-gzeps");
        contentType.put(".epsi", "image/x-eps");
        contentType.put(".epsi.bz2", "image/x-bzeps");
        contentType.put(".epsi.gz", "image/x-gzeps");
        contentType.put(".epub", "application/epub+zip");
        contentType.put(".erl", "text/x-erlang");
        contentType.put(".es", "application/ecmascript");
        contentType.put(".etheme", "application/x-e-theme");
        contentType.put(".etx", "text/x-setext");
        contentType.put(".exe", "application/x-ms-dos-executable");
        contentType.put(".exr", "image/x-exr");
        contentType.put(".ez", "application/andrew-inset");
        contentType.put(".f", "text/x-fortran");
        contentType.put(".f90", "text/x-fortran");
        contentType.put(".f95", "text/x-fortran");
        contentType.put(".fb2", "application/x-fictionbook+xml");
        contentType.put(".fig", "image/x-xfig");
        contentType.put(".fits", "image/fits");
        contentType.put(".fl", "application/x-fluid");
        contentType.put(".flac", "audio/x-flac");
        contentType.put(".flc", "video/x-flic");
        contentType.put(".fli", "video/x-flic");
        contentType.put(".flv", "video/x-flv");
        contentType.put(".flw", "application/x-kivio");
        contentType.put(".fo", "text/x-xslfo");
        contentType.put(".for", "text/x-fortran");
        contentType.put(".g3", "image/fax-g3");
        contentType.put(".gb", "application/x-gameboy-rom");
        contentType.put(".gba", "application/x-gba-rom");
        contentType.put(".gcrd", "text/directory");
        contentType.put(".ged", "application/x-gedcom");
        contentType.put(".gedcom", "application/x-gedcom");
        contentType.put(".gen", "application/x-genesis-rom");
        contentType.put(".gf", "application/x-tex-gf");
        contentType.put(".gg", "application/x-sms-rom");
        contentType.put(".gif", "image/gif");
        contentType.put(".glade", "application/x-glade");
        contentType.put(".gmo", "application/x-gettext-translation");
        contentType.put(".gnc", "application/x-gnucash");
        contentType.put(".gnd", "application/gnunet-directory");
        contentType.put(".gnucash", "application/x-gnucash");
        contentType.put(".gnumeric", "application/x-gnumeric");
        contentType.put(".gnuplot", "application/x-gnuplot");
        contentType.put(".gp", "application/x-gnuplot");
        contentType.put(".gpg", "application/pgp-encrypted");
        contentType.put(".gplt", "application/x-gnuplot");
        contentType.put(".gra", "application/x-graphite");
        contentType.put(".gsf", "application/x-font-type1");
        contentType.put(".gsm", "audio/x-gsm");
        contentType.put(".gtar", "application/x-tar");
        contentType.put(".gv", "text/vnd.graphviz");
        contentType.put(".gvp", "text/x-google-video-pointer");
        contentType.put(".gz", "application/x-gzip");
        contentType.put(".h", "text/x-chdr");
        contentType.put(".h++", "text/x-c++hdr");
        contentType.put(".hdf", "application/x-hdf");
        contentType.put(".hh", "text/x-c++hdr");
        contentType.put(".hp", "text/x-c++hdr");
        contentType.put(".hpgl", "application/vnd.hp-hpgl");
        contentType.put(".hpp", "text/x-c++hdr");
        contentType.put(".hs", "text/x-haskell");
        contentType.put(".htm", "text/html");
        contentType.put(".html", "text/html");
        contentType.put(".hwp", "application/x-hwp");
        contentType.put(".hwt", "application/x-hwt");
        contentType.put(".hxx", "text/x-c++hdr");
        contentType.put(".ica", "application/x-ica");
        contentType.put(".icb", "image/x-tga");
        contentType.put(".icns", "image/x-icns");
        contentType.put(".ico", "image/vnd.microsoft.icon");
        contentType.put(".ics", "text/calendar");
        contentType.put(".idl", "text/x-idl");
        contentType.put(".ief", "image/ief");
        contentType.put(".iff", "image/x-iff");
        contentType.put(".ilbm", "image/x-ilbm");
        contentType.put(".ime", "text/x-imelody");
        contentType.put(".imy", "text/x-imelody");
        contentType.put(".ins", "text/x-tex");
        contentType.put(".iptables", "text/x-iptables");
        contentType.put(".iso", "application/x-cd-image");
        contentType.put(".iso9660", "application/x-cd-image");
        contentType.put(".it", "audio/x-it");
        contentType.put(".j2k", "image/jp2");
        contentType.put(".jad", "text/vnd.sun.j2me.app-descriptor");
        contentType.put(".jar", "application/x-java-archive");
        contentType.put(".java", "text/x-java");
        contentType.put(".jng", "image/x-jng");
        contentType.put(".jnlp", "application/x-java-jnlp-file");
        contentType.put(".jp2", "image/jp2");
        contentType.put(".jpc", "image/jp2");
        contentType.put(".jpe", "image/jpeg");
        contentType.put(".jpeg", "image/jpeg");
        contentType.put(".jpf", "image/jp2");
        contentType.put(".jpg", "image/jpeg");
        contentType.put(".jpr", "application/x-jbuilder-project");
        contentType.put(".jpx", "image/jp2");
        contentType.put(".js", "application/javascript");
        contentType.put(".json", "application/json");
        contentType.put(".jsonp", "application/jsonp");
        contentType.put(".k25", "image/x-kodak-k25");
        contentType.put(".kar", "audio/midi");
        contentType.put(".karbon", "application/x-karbon");
        contentType.put(".kdc", "image/x-kodak-kdc");
        contentType.put(".kdelnk", "application/x-desktop");
        contentType.put(".kexi", "application/x-kexiproject-sqlite3");
        contentType.put(".kexic", "application/x-kexi-connectiondata");
        contentType.put(".kexis", "application/x-kexiproject-shortcut");
        contentType.put(".kfo", "application/x-kformula");
        contentType.put(".kil", "application/x-killustrator");
        contentType.put(".kino", "application/smil");
        contentType.put(".kml", "application/vnd.google-earth.kml+xml");
        contentType.put(".kmz", "application/vnd.google-earth.kmz");
        contentType.put(".kon", "application/x-kontour");
        contentType.put(".kpm", "application/x-kpovmodeler");
        contentType.put(".kpr", "application/x-kpresenter");
        contentType.put(".kpt", "application/x-kpresenter");
        contentType.put(".kra", "application/x-krita");
        contentType.put(".ksp", "application/x-kspread");
        contentType.put(".kud", "application/x-kugar");
        contentType.put(".kwd", "application/x-kword");
        contentType.put(".kwt", "application/x-kword");
        contentType.put(".la", "application/x-shared-library-la");
        contentType.put(".latex", "text/x-tex");
        contentType.put(".ldif", "text/x-ldif");
        contentType.put(".lha", "application/x-lha");
        contentType.put(".lhs", "text/x-literate-haskell");
        contentType.put(".lhz", "application/x-lhz");
        contentType.put(".log", "text/x-log");
        contentType.put(".ltx", "text/x-tex");
        contentType.put(".lua", "text/x-lua");
        contentType.put(".lwo", "image/x-lwo");
        contentType.put(".lwob", "image/x-lwo");
        contentType.put(".lws", "image/x-lws");
        contentType.put(".ly", "text/x-lilypond");
        contentType.put(".lyx", "application/x-lyx");
        contentType.put(".lz", "application/x-lzip");
        contentType.put(".lzh", "application/x-lha");
        contentType.put(".lzma", "application/x-lzma");
        contentType.put(".lzo", "application/x-lzop");
        contentType.put(".m", "text/x-matlab");
        contentType.put(".m15", "audio/x-mod");
        contentType.put(".m2t", "video/mpeg");
        contentType.put(".m3u", "audio/x-mpegurl");
        contentType.put(".m3u8", "audio/x-mpegurl");
        contentType.put(".m4", "application/x-m4");
        contentType.put(".m4a", "audio/mp4");
        contentType.put(".m4b", "audio/x-m4b");
        contentType.put(".m4v", "video/mp4");
        contentType.put(".mab", "application/x-markaby");
        contentType.put(".man", "application/x-troff-man");
        contentType.put(".mbox", "application/mbox");
        contentType.put(".md", "application/x-genesis-rom");
        contentType.put(".mdb", "application/vnd.ms-access");
        contentType.put(".mdi", "image/vnd.ms-modi");
        contentType.put(".me", "text/x-troff-me");
        contentType.put(".med", "audio/x-mod");
        contentType.put(".metalink", "application/metalink+xml");
        contentType.put(".mgp", "application/x-magicpoint");
        contentType.put(".mid", "audio/midi");
        contentType.put(".midi", "audio/midi");
        contentType.put(".mif", "application/x-mif");
        contentType.put(".minipsf", "audio/x-minipsf");
        contentType.put(".mka", "audio/x-matroska");
        contentType.put(".mkv", "video/x-matroska");
        contentType.put(".ml", "text/x-ocaml");
        contentType.put(".mli", "text/x-ocaml");
        contentType.put(".mm", "text/x-troff-mm");
        contentType.put(".mmf", "application/x-smaf");
        contentType.put(".mml", "text/mathml");
        contentType.put(".mng", "video/x-mng");
        contentType.put(".mo", "application/x-gettext-translation");
        contentType.put(".mo3", "audio/x-mo3");
        contentType.put(".moc", "text/x-moc");
        contentType.put(".mod", "audio/x-mod");
        contentType.put(".mof", "text/x-mof");
        contentType.put(".moov", "video/quicktime");
        contentType.put(".mov", "video/quicktime");
        contentType.put(".movie", "video/x-sgi-movie");
        contentType.put(".mp+", "audio/x-musepack");
        contentType.put(".mp2", "video/mpeg");
        contentType.put(".mp3", "audio/mpeg");
        contentType.put(".mp4", "video/mp4");
        contentType.put(".mpc", "audio/x-musepack");
        contentType.put(".mpe", "video/mpeg");
        contentType.put(".mpeg", "video/mpeg");
        contentType.put(".mpg", "video/mpeg");
        contentType.put(".mpga", "audio/mpeg");
        contentType.put(".mpp", "audio/x-musepack");
        contentType.put(".mrl", "text/x-mrml");
        contentType.put(".mrml", "text/x-mrml");
        contentType.put(".mrw", "image/x-minolta-mrw");
        contentType.put(".ms", "text/x-troff-ms");
        contentType.put(".msi", "application/x-msi");
        contentType.put(".msod", "image/x-msod");
        contentType.put(".msx", "application/x-msx-rom");
        contentType.put(".mtm", "audio/x-mod");
        contentType.put(".mup", "text/x-mup");
        contentType.put(".mxf", "application/mxf");
        contentType.put(".n64", "application/x-n64-rom");
        contentType.put(".nb", "application/mathematica");
        contentType.put(".nc", "application/x-netcdf");
        contentType.put(".nds", "application/x-nintendo-ds-rom");
        contentType.put(".nef", "image/x-nikon-nef");
        contentType.put(".nes", "application/x-nes-rom");
        contentType.put(".nfo", "text/x-nfo");
        contentType.put(".not", "text/x-mup");
        contentType.put(".nsc", "application/x-netshow-channel");
        contentType.put(".nsv", "video/x-nsv");
        contentType.put(".o", "application/x-object");
        contentType.put(".obj", "application/x-tgif");
        contentType.put(".ocl", "text/x-ocl");
        contentType.put(".oda", "application/oda");
        contentType.put(".odb", "application/vnd.oasis.opendocument.database");
        contentType.put(".odc", "application/vnd.oasis.opendocument.chart");
        contentType.put(".odf", "application/vnd.oasis.opendocument.formula");
        contentType.put(".odg", "application/vnd.oasis.opendocument.graphics");
        contentType.put(".odi", "application/vnd.oasis.opendocument.image");
        contentType.put(".odm", "application/vnd.oasis.opendocument.text-master");
        contentType.put(".odp", "application/vnd.oasis.opendocument.presentation");
        contentType.put(".ods", "application/vnd.oasis.opendocument.spreadsheet");
        contentType.put(".odt", "application/vnd.oasis.opendocument.text");
        contentType.put(".oga", "audio/ogg");
        contentType.put(".ogg", "video/x-theora+ogg");
        contentType.put(".ogm", "video/x-ogm+ogg");
        contentType.put(".ogv", "video/ogg");
        contentType.put(".ogx", "application/ogg");
        contentType.put(".old", "application/x-trash");
        contentType.put(".oleo", "application/x-oleo");
        contentType.put(".opml", "text/x-opml+xml");
        contentType.put(".ora", "image/openraster");
        contentType.put(".orf", "image/x-olympus-orf");
        contentType.put(".otc", "application/vnd.oasis.opendocument.chart-template");
        contentType.put(".otf", "application/x-font-otf");
        contentType.put(".otg", "application/vnd.oasis.opendocument.graphics-template");
        contentType.put(".oth", "application/vnd.oasis.opendocument.text-web");
        contentType.put(".otp", "application/vnd.oasis.opendocument.presentation-template");
        contentType.put(".ots", "application/vnd.oasis.opendocument.spreadsheet-template");
        contentType.put(".ott", "application/vnd.oasis.opendocument.text-template");
        contentType.put(".owl", "application/rdf+xml");
        contentType.put(".oxt", "application/vnd.openofficeorg.extension");
        contentType.put(".p", "text/x-pascal");
        contentType.put(".p10", "application/pkcs10");
        contentType.put(".p12", "application/x-pkcs12");
        contentType.put(".p7b", "application/x-pkcs7-certificates");
        contentType.put(".p7s", "application/pkcs7-signature");
        contentType.put(".pack", "application/x-java-pack200");
        contentType.put(".pak", "application/x-pak");
        contentType.put(".par2", "application/x-par2");
        contentType.put(".pas", "text/x-pascal");
        contentType.put(".patch", "text/x-patch");
        contentType.put(".pbm", "image/x-portable-bitmap");
        contentType.put(".pcd", "image/x-photo-cd");
        contentType.put(".pcf", "application/x-cisco-vpn-settings");
        contentType.put(".pcf.gz", "application/x-font-pcf");
        contentType.put(".pcf.z", "application/x-font-pcf");
        contentType.put(".pcl", "application/vnd.hp-pcl");
        contentType.put(".pcx", "image/x-pcx");
        contentType.put(".pdb", "chemical/x-pdb");
        contentType.put(".pdc", "application/x-aportisdoc");
        contentType.put(".pdf", "application/pdf");
        contentType.put(".pdf.bz2", "application/x-bzpdf");
        contentType.put(".pdf.gz", "application/x-gzpdf");
        contentType.put(".pef", "image/x-pentax-pef");
        contentType.put(".pem", "application/x-x509-ca-cert");
        contentType.put(".perl", "application/x-perl");
        contentType.put(".pfa", "application/x-font-type1");
        contentType.put(".pfb", "application/x-font-type1");
        contentType.put(".pfx", "application/x-pkcs12");
        contentType.put(".pgm", "image/x-portable-graymap");
        contentType.put(".pgn", "application/x-chess-pgn");
        contentType.put(".pgp", "application/pgp-encrypted");
        contentType.put(".php", "application/x-php");
        contentType.put(".php3", "application/x-php");
        contentType.put(".php4", "application/x-php");
        contentType.put(".pict", "image/x-pict");
        contentType.put(".pict1", "image/x-pict");
        contentType.put(".pict2", "image/x-pict");
        contentType.put(".pickle", "application/python-pickle");
        contentType.put(".pk", "application/x-tex-pk");
        contentType.put(".pkipath", "application/pkix-pkipath");
        contentType.put(".pkr", "application/pgp-keys");
        contentType.put(".pl", "application/x-perl");
        contentType.put(".pla", "audio/x-iriver-pla");
        contentType.put(".pln", "application/x-planperfect");
        contentType.put(".pls", "audio/x-scpls");
        contentType.put(".pm", "application/x-perl");
        contentType.put(".png", "image/png");
        contentType.put(".pnm", "image/x-portable-anymap");
        contentType.put(".pntg", "image/x-macpaint");
        contentType.put(".po", "text/x-gettext-translation");
        contentType.put(".por", "application/x-spss-por");
        contentType.put(".pot", "text/x-gettext-translation-template");
        contentType.put(".ppm", "image/x-portable-pixmap");
        contentType.put(".pps", "application/vnd.ms-powerpoint");
        contentType.put(".ppt", "application/vnd.ms-powerpoint");
        contentType.put(".pptm", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
        contentType.put(".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
        contentType.put(".ppz", "application/vnd.ms-powerpoint");
        contentType.put(".prc", "application/x-palm-database");
        contentType.put(".ps", "application/postscript");
        contentType.put(".ps.bz2", "application/x-bzpostscript");
        contentType.put(".ps.gz", "application/x-gzpostscript");
        contentType.put(".psd", "image/vnd.adobe.photoshop");
        contentType.put(".psf", "audio/x-psf");
        contentType.put(".psf.gz", "application/x-gz-font-linux-psf");
        contentType.put(".psflib", "audio/x-psflib");
        contentType.put(".psid", "audio/prs.sid");
        contentType.put(".psw", "application/x-pocket-word");
        contentType.put(".pw", "application/x-pw");
        contentType.put(".py", "text/x-python");
        contentType.put(".pyc", "application/x-python-bytecode");
        contentType.put(".pyo", "application/x-python-bytecode");
        contentType.put(".qif", "image/x-quicktime");
        contentType.put(".qt", "video/quicktime");
        contentType.put(".qtif", "image/x-quicktime");
        contentType.put(".qtl", "application/x-quicktime-media-link");
        contentType.put(".qtvr", "video/quicktime");
        contentType.put(".ra", "audio/vnd.rn-realaudio");
        contentType.put(".raf", "image/x-fuji-raf");
        contentType.put(".ram", "application/ram");
        contentType.put(".rar", "application/x-rar");
        contentType.put(".ras", "image/x-cmu-raster");
        contentType.put(".raw", "image/x-panasonic-raw");
        contentType.put(".rax", "audio/vnd.rn-realaudio");
        contentType.put(".rb", "application/x-ruby");
        contentType.put(".rdf", "application/rdf+xml");
        contentType.put(".rdfs", "application/rdf+xml");
        contentType.put(".reg", "text/x-ms-regedit");
        contentType.put(".rej", "application/x-reject");
        contentType.put(".rgb", "image/x-rgb");
        contentType.put(".rle", "image/rle");
        contentType.put(".rm", "application/vnd.rn-realmedia");
        contentType.put(".rmj", "application/vnd.rn-realmedia");
        contentType.put(".rmm", "application/vnd.rn-realmedia");
        contentType.put(".rms", "application/vnd.rn-realmedia");
        contentType.put(".rmvb", "application/vnd.rn-realmedia");
        contentType.put(".rmx", "application/vnd.rn-realmedia");
        contentType.put(".roff", "text/troff");
        contentType.put(".rp", "image/vnd.rn-realpix");
        contentType.put(".rpm", "application/x-rpm");
        contentType.put(".rss", "application/rss+xml");
        contentType.put(".rt", "text/vnd.rn-realtext");
        contentType.put(".rtf", "application/rtf");
        contentType.put(".rtx", "text/richtext");
        contentType.put(".rv", "video/vnd.rn-realvideo");
        contentType.put(".rvx", "video/vnd.rn-realvideo");
        contentType.put(".s3m", "audio/x-s3m");
        contentType.put(".sam", "application/x-amipro");
        contentType.put(".sami", "application/x-sami");
        contentType.put(".sav", "application/x-spss-sav");
        contentType.put(".scm", "text/x-scheme");
        contentType.put(".sda", "application/vnd.stardivision.draw");
        contentType.put(".sdc", "application/vnd.stardivision.calc");
        contentType.put(".sdd", "application/vnd.stardivision.impress");
        contentType.put(".sdp", "application/sdp");
        contentType.put(".sds", "application/vnd.stardivision.chart");
        contentType.put(".sdw", "application/vnd.stardivision.writer");
        contentType.put(".sgf", "application/x-go-sgf");
        contentType.put(".sgi", "image/x-sgi");
        contentType.put(".sgl", "application/vnd.stardivision.writer");
        contentType.put(".sgm", "text/sgml");
        contentType.put(".sgml", "text/sgml");
        contentType.put(".sh", "application/x-shellscript");
        contentType.put(".shar", "application/x-shar");
        contentType.put(".shn", "application/x-shorten");
        contentType.put(".siag", "application/x-siag");
        contentType.put(".sid", "audio/prs.sid");
        contentType.put(".sik", "application/x-trash");
        contentType.put(".sis", "application/vnd.symbian.install");
        contentType.put(".sisx", "x-epoc/x-sisx-app");
        contentType.put(".sit", "application/x-stuffit");
        contentType.put(".siv", "application/sieve");
        contentType.put(".sk", "image/x-skencil");
        contentType.put(".sk1", "image/x-skencil");
        contentType.put(".skr", "application/pgp-keys");
        contentType.put(".slk", "text/spreadsheet");
        contentType.put(".smaf", "application/x-smaf");
        contentType.put(".smc", "application/x-snes-rom");
        contentType.put(".smd", "application/vnd.stardivision.mail");
        contentType.put(".smf", "application/vnd.stardivision.math");
        contentType.put(".smi", "application/x-sami");
        contentType.put(".smil", "application/smil");
        contentType.put(".sml", "application/smil");
        contentType.put(".sms", "application/x-sms-rom");
        contentType.put(".snd", "audio/basic");
        contentType.put(".so", "application/x-sharedlib");
        contentType.put(".spc", "application/x-pkcs7-certificates");
        contentType.put(".spd", "application/x-font-speedo");
        contentType.put(".spec", "text/x-rpm-spec");
        contentType.put(".spl", "application/x-shockwave-flash");
        contentType.put(".spx", "audio/x-speex");
        contentType.put(".sql", "text/x-sql");
        contentType.put(".sr2", "image/x-sony-sr2");
        contentType.put(".src", "application/x-wais-source");
        contentType.put(".srf", "image/x-sony-srf");
        contentType.put(".srt", "application/x-subrip");
        contentType.put(".ssa", "text/x-ssa");
        contentType.put(".stc", "application/vnd.sun.xml.calc.template");
        contentType.put(".std", "application/vnd.sun.xml.draw.template");
        contentType.put(".sti", "application/vnd.sun.xml.impress.template");
        contentType.put(".stm", "audio/x-stm");
        contentType.put(".stw", "application/vnd.sun.xml.writer.template");
        contentType.put(".sty", "text/x-tex");
        contentType.put(".sub", "text/x-subviewer");
        contentType.put(".sun", "image/x-sun-raster");
        contentType.put(".sv4cpio", "application/x-sv4cpio");
        contentType.put(".sv4crc", "application/x-sv4crc");
        contentType.put(".svg", "image/svg+xml");
        contentType.put(".svgz", "image/svg+xml-compressed");
        contentType.put(".swf", "application/x-shockwave-flash");
        contentType.put(".sxc", "application/vnd.sun.xml.calc");
        contentType.put(".sxd", "application/vnd.sun.xml.draw");
        contentType.put(".sxg", "application/vnd.sun.xml.writer.global");
        contentType.put(".sxi", "application/vnd.sun.xml.impress");
        contentType.put(".sxm", "application/vnd.sun.xml.math");
        contentType.put(".sxw", "application/vnd.sun.xml.writer");
        contentType.put(".sylk", "text/spreadsheet");
        contentType.put(".t", "text/troff");
        contentType.put(".t2t", "text/x-txt2tags");
        contentType.put(".tar", "application/x-tar");
        contentType.put(".tar.bz", "application/x-bzip-compressed-tar");
        contentType.put(".tar.bz2", "application/x-bzip-compressed-tar");
        contentType.put(".tar.gz", "application/x-compressed-tar");
        contentType.put(".tar.lzma", "application/x-lzma-compressed-tar");
        contentType.put(".tar.lzo", "application/x-tzo");
        contentType.put(".tar.xz", "application/x-xz-compressed-tar");
        contentType.put(".tar.z", "application/x-tarz");
        contentType.put(".tbz", "application/x-bzip-compressed-tar");
        contentType.put(".tbz2", "application/x-bzip-compressed-tar");
        contentType.put(".tcl", "text/x-tcl");
        contentType.put(".tex", "text/x-tex");
        contentType.put(".texi", "text/x-texinfo");
        contentType.put(".texinfo", "text/x-texinfo");
        contentType.put(".tga", "image/x-tga");
        contentType.put(".tgz", "application/x-compressed-tar");
        contentType.put(".theme", "application/x-theme");
        contentType.put(".themepack", "application/x-windows-themepack");
        contentType.put(".tif", "image/tiff");
        contentType.put(".tiff", "image/tiff");
        contentType.put(".tk", "text/x-tcl");
        contentType.put(".tlz", "application/x-lzma-compressed-tar");
        contentType.put(".tnef", "application/vnd.ms-tnef");
        contentType.put(".tnf", "application/vnd.ms-tnef");
        contentType.put(".toc", "application/x-cdrdao-toc");
        contentType.put(".torrent", "application/x-bittorrent");
        contentType.put(".tpic", "image/x-tga");
        contentType.put(".tr", "text/troff");
        contentType.put(".ts", "application/x-linguist");
        contentType.put(".tsv", "text/tab-separated-values");
        contentType.put(".tta", "audio/x-tta");
        contentType.put(".ttc", "application/x-font-ttf");
        contentType.put(".ttf", "application/x-font-ttf");
        contentType.put(".ttx", "application/x-font-ttx");
        contentType.put(".txt", "text/plain");
        contentType.put(".txz", "application/x-xz-compressed-tar");
        contentType.put(".tzo", "application/x-tzo");
        contentType.put(".ufraw", "application/x-ufraw");
        contentType.put(".ui", "application/x-designer");
        contentType.put(".uil", "text/x-uil");
        contentType.put(".ult", "audio/x-mod");
        contentType.put(".uni", "audio/x-mod");
        contentType.put(".uri", "text/x-uri");
        contentType.put(".url", "text/x-uri");
        contentType.put(".ustar", "application/x-ustar");
        contentType.put(".vala", "text/x-vala");
        contentType.put(".vapi", "text/x-vala");
        contentType.put(".vcf", "text/directory");
        contentType.put(".vcs", "text/calendar");
        contentType.put(".vct", "text/directory");
        contentType.put(".vda", "image/x-tga");
        contentType.put(".vhd", "text/x-vhdl");
        contentType.put(".vhdl", "text/x-vhdl");
        contentType.put(".viv", "video/vivo");
        contentType.put(".vivo", "video/vivo");
        contentType.put(".vlc", "audio/x-mpegurl");
        contentType.put(".vob", "video/mpeg");
        contentType.put(".voc", "audio/x-voc");
        contentType.put(".vor", "application/vnd.stardivision.writer");
        contentType.put(".vst", "image/x-tga");
        contentType.put(".wav", "audio/x-wav");
        contentType.put(".wax", "audio/x-ms-asx");
        contentType.put(".wb1", "application/x-quattropro");
        contentType.put(".wb2", "application/x-quattropro");
        contentType.put(".wb3", "application/x-quattropro");
        contentType.put(".wbmp", "image/vnd.wap.wbmp");
        contentType.put(".wcm", "application/vnd.ms-works");
        contentType.put(".wdb", "application/vnd.ms-works");
        contentType.put(".webm", "video/webm");
        contentType.put(".wk1", "application/vnd.lotus-1-2-3");
        contentType.put(".wk3", "application/vnd.lotus-1-2-3");
        contentType.put(".wk4", "application/vnd.lotus-1-2-3");
        contentType.put(".wks", "application/vnd.ms-works");
        contentType.put(".wma", "audio/x-ms-wma");
        contentType.put(".wmf", "image/x-wmf");
        contentType.put(".wml", "text/vnd.wap.wml");
        contentType.put(".wmls", "text/vnd.wap.wmlscript");
        contentType.put(".wmv", "video/x-ms-wmv");
        contentType.put(".wmx", "audio/x-ms-asx");
        contentType.put(".wp", "application/vnd.wordperfect");
        contentType.put(".wp4", "application/vnd.wordperfect");
        contentType.put(".wp5", "application/vnd.wordperfect");
        contentType.put(".wp6", "application/vnd.wordperfect");
        contentType.put(".wpd", "application/vnd.wordperfect");
        contentType.put(".wpg", "application/x-wpg");
        contentType.put(".wpl", "application/vnd.ms-wpl");
        contentType.put(".wpp", "application/vnd.wordperfect");
        contentType.put(".wps", "application/vnd.ms-works");
        contentType.put(".wri", "application/x-mswrite");
        contentType.put(".wrl", "model/vrml");
        contentType.put(".wv", "audio/x-wavpack");
        contentType.put(".wvc", "audio/x-wavpack-correction");
        contentType.put(".wvp", "audio/x-wavpack");
        contentType.put(".wvx", "audio/x-ms-asx");
        contentType.put(".x3f", "image/x-sigma-x3f");
        contentType.put(".xac", "application/x-gnucash");
        contentType.put(".xbel", "application/x-xbel");
        contentType.put(".xbl", "application/xml");
        contentType.put(".xbm", "image/x-xbitmap");
        contentType.put(".xcf", "image/x-xcf");
        contentType.put(".xcf.bz2", "image/x-compressed-xcf");
        contentType.put(".xcf.gz", "image/x-compressed-xcf");
        contentType.put(".xhtml", "application/xhtml+xml");
        contentType.put(".xi", "audio/x-xi");
        contentType.put(".xla", "application/vnd.ms-excel");
        contentType.put(".xlc", "application/vnd.ms-excel");
        contentType.put(".xld", "application/vnd.ms-excel");
        contentType.put(".xlf", "application/x-xliff");
        contentType.put(".xliff", "application/x-xliff");
        contentType.put(".xll", "application/vnd.ms-excel");
        contentType.put(".xlm", "application/vnd.ms-excel");
        contentType.put(".xls", "application/vnd.ms-excel");
        contentType.put(".xlsm", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        contentType.put(".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        contentType.put(".xlt", "application/vnd.ms-excel");
        contentType.put(".xlw", "application/vnd.ms-excel");
        contentType.put(".xm", "audio/x-xm");
        contentType.put(".xmf", "audio/x-xmf");
        contentType.put(".xmi", "text/x-xmi");
        contentType.put(".xml", "application/xml");
        contentType.put(".xpm", "image/x-xpixmap");
        contentType.put(".xps", "application/vnd.ms-xpsdocument");
        contentType.put(".xsl", "application/xml");
        contentType.put(".xslfo", "text/x-xslfo");
        contentType.put(".xslt", "application/xml");
        contentType.put(".xspf", "application/xspf+xml");
        contentType.put(".xul", "application/vnd.mozilla.xul+xml");
        contentType.put(".xwd", "image/x-xwindowdump");
        contentType.put(".xyz", "chemical/x-pdb");
        contentType.put(".xz", "application/x-xz");
        contentType.put(".w2p", "application/w2p");
        contentType.put(".z", "application/x-compress");
        contentType.put(".zabw", "application/x-abiword");
        contentType.put(".zip", "application/zip");
    }

    public static void setResponse(HttpServletResponse response, String excelName) {
        String suffix = excelName.substring(excelName.indexOf("."));
        String type = contentType.get(suffix);
        if (type == null) {
            type = APPLICATION_OCTET_STREAM_VALUE;
        }
        response.setContentType(type);
        excelName = new String((excelName).getBytes(Charset.forName(CHARSET_GB2312)), Charset.forName(CHARSET_ISO8859_1));
        response.setHeader("Content-disposition", String.format("attachment; filename=%s", excelName));
    }

    /**
     * 创建文件
     *
     * @param file File对象
     * @return 创建成功true否则false
     */
    public static boolean createFile(File file) {
        if (file == null) {
            return false;
        }
        if (exist(file)) {
            return true;
        }
        File parentFile = file.getParentFile();
        boolean flag = false;
        if (parentFile != null) {
            if (exist(parentFile)) {
                flag = true;
            } else {
                flag = parentFile.mkdirs();
            }
            if (flag) {
                try {
                    return file.createNewFile();
                } catch (IOException e) {
                    return false;
                }
            }
        }
        return false;
    }

    /**
     * 文件是否存在
     *
     * @param file File对象
     * @return 存在true否则false
     */
    public static boolean exist(File file) {
        if (file != null) {
            return file.exists();
        }
        return false;
    }

    /**
     * 获得输出流
     *
     * @param filePath 输出地址
     * @return 输出流
     */
    public static OutputStream getOutputStream(String filePath) {
        File file = new File(filePath);
        PoiCommon.createFile(file);
        OutputStream out = null;
        try {
            out = new FileOutputStream(file);
            return out;
        } catch (FileNotFoundException e) {
            log.error("执行异常" + e.getMessage());
            return null;
        }
    }

    /**
     * 通过给字段名称构建出相应的get方法名称
     *
     * @param fieldName 字段名称
     * @return 组合之后的名称
     */
    private static String buildGetMethod(String fieldName, boolean isBoolean) {
        StringBuilder sb = new StringBuilder();
        if (isBoolean) {
            sb.append(IS);
        } else {
            sb.append(GET);
        }
        sb.append(Character.toUpperCase(fieldName.charAt(0)));
        sb.append(fieldName.substring(1));
        return sb.toString();
    }

    /**
     * 通过给字段名称构建出相应的set方法名称
     *
     * @param fieldName 字段名称
     * @return 组合之后的名称
     */
    private static String buildSetMethod(String fieldName) {
        StringBuilder sb = new StringBuilder(SET);
        sb.append(Character.toUpperCase(fieldName.charAt(0)));
        sb.append(fieldName.substring(1));
        return sb.toString();
    }

    /**
     * 通过反射的方式执行getXxx()方法
     *
     * @param obj   实体对象
     * @param field 字段
     * @return 执行了getXxx()方法之后的值
     */
    public static Object executeGetMethod(Object obj, Field field) {
        if (obj == null) {
            return null;
        }
        try {
            return obj.getClass().getMethod(buildGetMethod(field.getName(), field.getType() == Boolean.class)).invoke(obj);
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
            return null;
        }
    }

    /**
     * 通过反射的方法执行setXxx(xx)方法
     *
     * @param obj   实体对象
     * @param field 字段
     * @param val   执行set方法的值
     * @return 成功返回true，失败false
     */
    public static boolean executeSetMethod(Object obj, Field field, Object val) {
        if (obj == null) {
            return false;
        }
        try {
            Method method = obj.getClass().getMethod(buildSetMethod(field.getName()), field.getType());
            method.invoke(obj, val);
            return true;
        } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
            return false;
        }
    }

    private final static String FORMAT = "yyyy-MM-dd HH:mm:ss";

    /**
     * 字符串转各种类型
     *
     * @param str   字符串
     * @param clazz 类型的class
     * @return 符合clazz的对象
     */
    public static Object strToObj(String str, Class clazz) {
        if (clazz == null || str == null) {
            return null;
        }
        if (clazz == byte.class || clazz == Byte.class) {
            return Byte.parseByte(str);
        } else if (clazz == short.class || clazz == Short.class) {
            return Short.parseShort(str);
        } else if (clazz == int.class || clazz == Integer.class) {
            return Integer.parseInt(str);
        } else if (clazz == long.class || clazz == Long.class) {
            return Long.parseLong(str);
        } else if (clazz == float.class || clazz == Float.class) {
            return Float.parseFloat(str);
        } else if (clazz == double.class || clazz == Double.class) {
            return Double.parseDouble(str);
        } else if (clazz == boolean.class || clazz == Boolean.class) {
            return Boolean.parseBoolean(str);
        } else if (clazz == char.class || clazz == Character.class) {
            return str.charAt(0);
        } else if (clazz == char[].class || clazz == Character[].class) {
            return str.toCharArray();
        } else if (clazz == Date.class) {
            SimpleDateFormat sdf = new SimpleDateFormat(FORMAT);
            try {
                return sdf.parse(str);
            } catch (ParseException e) {
                return null;
            }
        }
        return str;
    }

}
